// 更新对象数组的某个元素
const updateAccount = (id, newData, allData) => {
  return allData.map(account =>
    account.id === id ? { ...account, ...newData } : account
  );
};

// 判断对象的属性是否全不为空
const allPropertiesNotEmpty = (obj) => {
  return Object.values(obj).every(value => value !== null && value !== undefined && value !== '');
}

function validateData(data) {
  // 检查字段是否为空
  if (!data.last_name || !data.id_number_pre || !data.id_number_suf || !data.phone_pre || !data.phone_suf) {
    return { isValid: false, message: "请将数据输入完整" };
  }

  // 检查 id_number_pre 和 phone_pre 的长度是否为 3
  if (data.id_number_pre.length !== 3 || data.phone_pre.length !== 3) {
    return { isValid: false, message: "请输入正确格式数据" };
  }

  // 检查 phone_suf 和 id_number_suf 的长度是否为 4
  if (data.phone_suf.length !== 4 || data.id_number_suf.length !== 4) {
    return { isValid: false, message: "请输入正确格式数据" };
  }

  // 检查 id_number_pre 和 phone_suf 是否为数字
  if (!/^\d+$/.test(data.id_number_pre) || !/^\d+$/.test(data.phone_pre) || !/^\d+$/.test(data.phone_suf)) {
    return { isValid: false, message: "请输入正确格式数据" };
  }

  // 如果所有检查都通过，返回有效状态
  return { isValid: true, message: "数据有效" };
}

// 递归比较两个对象
function deepEqual(obj1, obj2) {
  if (obj1 === obj2) return true;

  if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {
      return false;
  }

  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);

  if (keys1.length !== keys2.length) return false;

  for (let key of keys1) {
      if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
          return false;
      }
  }

  return true;
}
// 对比两个对象数组是否相等
function deepArrayEqual(arr1, arr2) {
  // 首先检查两个数组是否是同一个引用
  if (arr1 === arr2) return true;

  // 如果数组的长度不相同，则它们不相等
  if (arr1.length !== arr2.length) return false;

  // 逐个比较数组中的每个对象
  for (let i = 0; i < arr1.length; i++) {
      const obj1 = arr1[i];
      const obj2 = arr2[i];

      // 如果有一个元素不相等，则返回 false
      if (!deepEqual(obj1, obj2)) {
          return false;
      }
  }

  return true; // 所有元素都相等时，返回 true
}

export {
  updateAccount,
  allPropertiesNotEmpty,
  validateData,
  deepArrayEqual
}